package cn.seecoder.ai.serviceImpl;

import cn.seecoder.ai.dao.AnalysisConfigRepository;
import cn.seecoder.ai.dao.FileInfoRepository;
import cn.seecoder.ai.model.po.AnalysisConfig;
import cn.seecoder.ai.model.vo.AnalysisConfigVO;
import cn.seecoder.ai.service.AnalysisConfigService;
import cn.seecoder.ai.utils.POJOConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author DingXiaoyu
 * @date 2023/4/16 14:33
 */

@Service
public class AnalysisConfigServiceImpl implements AnalysisConfigService {

    @Autowired
    AnalysisConfigRepository analysisConfigRepository;

    @Autowired
    FileInfoRepository fileInfoRepository;

    @Override
    public AnalysisConfigVO addAnalysisConfig(AnalysisConfigVO analysisConfigVO) {
        AnalysisConfig analysisConfig=toPO(analysisConfigVO);
        analysisConfigRepository.save(analysisConfig);
        return toVO(analysisConfig);
    }

    @Override
    public List<AnalysisConfigVO> getAnalysisConfigs(Integer userId) {
        List<AnalysisConfig> analysisConfigs=analysisConfigRepository.findByUserId(userId);
        List<AnalysisConfigVO> list=analysisConfigs.stream().map(this::toVO).collect(Collectors.toList());
        for (AnalysisConfigVO analysisConfigVO : list) {
            analysisConfigVO.setFileName(fileInfoRepository.findById(analysisConfigVO.getFileInfoId()).get().getFileName());
        }
        return list;
    }

    @Override
    public Boolean deleteAnalysisConfig(Integer configId) {
        analysisConfigRepository.deleteById(configId);
        return true;
    }

    @Override
    public AnalysisConfigVO getAnalysisConfig(Integer configId) {
        AnalysisConfig analysisConfig=analysisConfigRepository.findById(configId).get();
        AnalysisConfigVO analysisConfigVO=toVO(analysisConfig);
        analysisConfigVO.setFileName(fileInfoRepository.findById(analysisConfigVO.getFileInfoId()).get().getFileName());
        return analysisConfigVO;
    }

    private AnalysisConfig toPO(AnalysisConfigVO analysisConfigVO){
        return (AnalysisConfig) POJOConverter.convert(analysisConfigVO);
    }

    private AnalysisConfigVO toVO(AnalysisConfig analysisConfig){
        return (AnalysisConfigVO)POJOConverter.convert(analysisConfig);
    }
}
